home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / hub.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  9KB  |  233 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from __future__ import with_statement
  5. import wx
  6. from gui.authorizationdialog import AuthorizationDialog
  7. from logging import getLogger
  8. log = getLogger('hub')
  9. info = log.info
  10. from util.singletonmixin import Singleton
  11. from util import Delegate, traceguard, get
  12. from common import profile, fire
  13. from cStringIO import StringIO
  14. from PIL import Image
  15. import sys
  16. from common.protocolmeta import protocols
  17. PROMOTE_STRING = '<br><br>I use <a href="http://www.digsby.com">digsby</a>!'
  18. global_locale = wx.Locale(wx.LANGUAGE_DEFAULT)
  19. _locale_obj = [
  20.     global_locale.GetCanonicalName(),
  21.     sys.getfilesystemencoding()]
  22.  
  23. class Hub(Singleton):
  24.     
  25.     def __init__(self):
  26.         Singleton.__init__(self)
  27.         self.getting_profile_for = None
  28.  
  29.     
  30.     def signoff(self):
  31.         pass
  32.  
  33.     
  34.     def filter_message(self, mobj, *a, **k):
  35.         conv = mobj.conversation
  36.         conn = conv.protocol
  37.         if not mobj.buddy:
  38.             pass
  39.         buddy = mobj.conversation.buddy
  40.         if conn.allow_message(buddy, mobj) is False:
  41.             log.debug('Message from %r is being ignored', buddy)
  42.             log.debug_s('The message was %r', mobj)
  43.             return Delegate.VETO
  44.         
  45.  
  46.     
  47.     def launchurl(self, url):
  48.         wx.LaunchDefaultBrowser(url)
  49.  
  50.     
  51.     def windowparent(self):
  52.         wins = wx.GetTopLevelWindows()
  53.         return None if wins else None
  54.  
  55.     
  56.     def get_file(self, msg = 'Choose a file'):
  57.         filediag = wx.FileDialog(self.windowparent(), msg)
  58.         if filediag.ShowModal() == wx.ID_OK:
  59.             return filediag.GetPath()
  60.         
  61.  
  62.     
  63.     def get_dir(self, msg = 'Choose a directory'):
  64.         dirdiag = wx.DirDialog(self.windowparent(), msg)
  65.         return None if dirdiag.ShowModal() == wx.ID_OK else None
  66.  
  67.     
  68.     def on_conversation(self, convo, quiet = False):
  69.         log.critical('on_conversation is deprecated and does nothing')
  70.  
  71.     
  72.     def send_message(self, buddy, message):
  73.         buddy.protocol.send_message(buddy = buddy.name, msg = message)
  74.  
  75.     
  76.     def user_message(self, message, title = ''):
  77.         wx.CallAfter(wx.MessageBox, message, title)
  78.  
  79.     
  80.     def on_error(self, e):
  81.         import traceback as traceback
  82.         log.error(traceback.format_exc())
  83.         title = get(e, 'header', 'Error:')
  84.         msg = get(e, 'major', '%s: %s' % (type(e).__name__, str(e)))
  85.         details = get(e, 'minor', '')
  86.         close = (_('Close'), (lambda : pass))
  87.         fire('error', title = title, msg = msg, details = details, sticky = True, popupid = Exception, buttons = (close,), update = 'replace')
  88.  
  89.     
  90.     def call_later(self, c, *a, **k):
  91.         c(*a, **k)
  92.  
  93.     
  94.     def on_file_request(self, protocol, xferinfo):
  95.         type = xferinfo.type
  96.         if xferinfo not in profile.xfers:
  97.             xferinfo.state = xferinfo.states.WAITING_FOR_YOU
  98.             notifies = fire('filetransfer.request', buddy = xferinfo.buddy, target = xferinfo)
  99.             xferinfo.notifications = notifies
  100.             profile.xfers.insert(0, xferinfo)
  101.         
  102.  
  103.     
  104.     def on_direct_connect(self, dc):
  105.         caption = _('%s DirectIM') % dc.protocol.name.capitalize()
  106.         msg = _('%s wants to directly connect with you. (Your IP address will be revealed.)' % dc.buddy.name)
  107.         None if self.popup(msg, caption) else dc.decline()
  108.  
  109.     
  110.     def on_invite(self, protocol, buddy, room_name, message = '', on_yes = None, on_no = None):
  111.         log.info('chat rooms are not implemented')
  112.         return None if on_no is not None else None
  113.  
  114.     
  115.     def authorize_buddy(self, protocol, buddy, message = '', username_added = None, callback = None):
  116.         message = message.strip()
  117.         if message:
  118.             message = '\n\n"%s"' % message
  119.         
  120.         if hasattr(buddy, 'name'):
  121.             buddy = buddy.name
  122.         
  123.         if callback is None:
  124.             callback = protocol.authorize_buddy
  125.         
  126.         if username_added is None:
  127.             username_added = protocol.username
  128.         
  129.         if buddy != protocol.self_buddy.name:
  130.             diag_message = _('Allow %s to add you (%s) as a buddy on %s?%s') % (buddy, username_added, protocols[protocol.service].name, message)
  131.             ad = AuthorizationDialog(protocol, buddy, diag_message, username_added, callback)
  132.             ad.Show(True)
  133.         else:
  134.             callback(buddy, True, username_added)
  135.  
  136.     
  137.     def on_mail(self, protocol, inbox_count, others_count = None):
  138.         log.info('%s has %s new mail messages', protocol.username, inbox_count)
  139.         if others_count:
  140.             log.info('%s has %s new OTHER mail messages', protocol.username, others_count)
  141.         
  142.  
  143.     
  144.     def send_typing_status(self, buddy, status):
  145.         buddy.protocol.send_typing_status(buddy.name, status)
  146.  
  147.     
  148.     def set_buddy_icon(self, wximage):
  149.         img = wximage.PIL
  150.         (w, h) = img.size
  151.         max = profile.MAX_ICON_SIZE
  152.         if w > max or h > max:
  153.             img = img.Resized(max)
  154.         
  155.         imgFile = StringIO()
  156.         img.save(imgFile, 'PNG', optimize = True)
  157.         self.set_buddy_icon_file(imgFile.getvalue())
  158.  
  159.     
  160.     def set_buddy_icon_file(self, bytes):
  161.         if hasattr(bytes, 'read'):
  162.             bytes = bytes.read()
  163.         
  164.         if not isinstance(bytes, str):
  165.             raise TypeError
  166.         
  167.         maxsz = profile.MAX_ICON_SIZE
  168.         maxbytes = MAX_BLOB_SIZE
  169.         import digsby.abstract_blob
  170.         nextsize = maxsz
  171.         tries = 0
  172.         while len(bytes) > maxbytes and tries < 10:
  173.             log.warning('image (%dx%d) is larger than %d bytes, have to resize', nextsize, nextsize, maxbytes)
  174.             img = Image.open(StringIO(bytes)).Resized(nextsize)
  175.             newimg = StringIO()
  176.             img.save(newimg, 'PNG', optimize = True)
  177.             bytes = newimg.getvalue()
  178.             nextsize = max(20, nextsize - 10)
  179.             tries += 1
  180.         log.info('setting %d bytes of icon data (max is %d): %s', len(bytes), maxbytes, bytes[:5])
  181.         profile.save_blob('icon', bytes)
  182.         for acct in profile.account_manager.connected_accounts:
  183.             traceguard.__enter__()
  184.             
  185.             try:
  186.                 acct.connection.set_and_size_icon(bytes)
  187.             finally:
  188.                 pass
  189.  
  190.         
  191.  
  192.     
  193.     def get_locale(self):
  194.         return _locale_obj
  195.  
  196.     
  197.     def get_lang_country(self):
  198.         lang_country = self.get_locale()[0]
  199.         (lang, country) = lang_country.split('_')
  200.         return (lang, country.lower().split('@')[0])
  201.  
  202.     
  203.     def get_country(self):
  204.         return self.get_lang_country()[1]
  205.  
  206.     country = property(get_country)
  207.     
  208.     def get_encoding(self):
  209.         return self.get_locale()[1]
  210.  
  211.     
  212.     def ProcessEvent(self, e):
  213.         print 'ProcessEvent', e
  214.  
  215.     
  216.     def get_language(self):
  217.         return self.get_lang_country()[0]
  218.  
  219.     language = property(get_language)
  220.     
  221.     def getThreadsafeInstance(cls):
  222.         ThreadsafeGUIProxy = ThreadsafeGUIProxy
  223.         import events
  224.         return ThreadsafeGUIProxy(cls.getInstance())
  225.  
  226.     getThreadsafeInstance = classmethod(getThreadsafeInstance)
  227.  
  228. get_instance = Hub.getInstance
  229.  
  230. def diskspace_check(size):
  231.     return True
  232.  
  233.